Go 踩坑记录
Context 的上下文问题
平时使用的很多中间件框架都要求在使用时传递一个 Context,而这个 Context 内的 ValueMap 存的是指针,所以需要深拷贝
defer 的坑
因为 defer 工作原理是将一个闭包压到最后执行,所以当闭包有入参时,会先执行这个入参(函数)
所以像这个 file.Close()
就会被当成入参,优先执行
func main() {
// ...
defer handError(file.Close())
// ...
}
func handError(err error) {
if err != nil {
log.Fatal(err.Error())
}
}
应该改成:
// ...
defer func() {
handError(f.Close())
}()